﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using skhukb.DB;

namespace skhukb.Models
{
    public class 주제Model : DB.주제
    {
        public 주제Model()
        {
        }

        public 주제Model(주제 주제)
        {
            copy(주제, this);
        }

        public 주제 to주제()
        {
            var 주제 = new 주제();
            copy(this, 주제);
            return 주제;
        }

        private static void copy(주제 from, 주제 to)
        {
            to.ID = from.ID;
            to.제목 = from.제목;
            to.코드 = from.코드;
            to.상위주제ID = from.상위주제ID;
            to.번호 = from.번호;
            to.제거 = from.제거;
            to.총제목 = from.총제목;
        }
    }


    public class SubjectDetailModel
    {
        public 주제Model 주제 { get; set; }
        public IList<주제Model> 상위주제목록 { get; set; }
        public IList<주제Model> 하위주제목록 { get; set; }
        public IList<글Model> 글목록 { get; set; }
    }

    // SubjectHistory
    public class SubjectHistory_글Model : 글Model
    {
        public bool 제거됨 { get; set; }
        public int 편집수 { get; set; }

        public SubjectHistory_글Model(글 글, bool 제거됨, int 편집수) : base(글)
        {            
            this.제거됨 = 제거됨;
            this.편집수 = 편집수;
        }
    }

    public class 주제편집Model : DB.주제편집
    {
        public string 편집자 { get; set; }

        public 주제편집Model()
        {
        }

        public 주제편집Model(주제편집 주제편집)
        {
            ID = 주제편집.ID;
            주제ID = 주제편집.주제ID;
            제목 = 주제편집.제목;
            내용 = 주제편집.내용;
            편집유형 = 주제편집.편집유형;
            편집일 = 주제편집.편집일;
            편집자ID = 주제편집.편집자ID;
            편집자 = 주제편집.사용자.이름;
        }
    }

    public class SubjectHistoryModel
    {
        public 주제Model 주제 { get; set; }
        public 주제Model 상위주제 { get; set; }
        public IList<SubjectHistory_글Model> 글목록 { get; set; }
        public IList<주제편집Model> 편집목록 { get; set; }
    }

    // SubjectSort
    public class SubjectSortModel
    {
        public 주제Model 주제 { get; set; }
        public string 목차순서 { get; set; }
        public IList<글Model> 글목록 { get; set; }
    }

    // TreeView
    public class 주제TreeModel : 주제Model
    {
        public int 글수 { get; set; }
        public DateTime 수정일 { get; set; }
        new public IList<주제TreeModel> 하위주제 { get; set; }
        private DateTime DATE = new DateTime(2000, 10, 10);

        public 주제TreeModel(주제 주제) : base(주제)
        {
            글수 = 주제.글.Count(p => p.상태 == BL.Consts.최신버전);
            if (글수 > 0) 수정일 = 주제.글.Where(p => p.상태 == BL.Consts.최신버전).Max(p => p.생성일);
            else if (주제.주제편집.Count > 0) 수정일 = 주제.주제편집.Max(p => p.편집일);
            else 수정일 = DATE; 
            하위주제 = new List<주제TreeModel>();
            foreach (var n in 주제.하위주제) {
                if (n.ID == 주제BL.ROOT.ID) continue;
                하위주제.Add(new 주제TreeModel(n));
            }
        }

    }

}
